home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / procssng / ccs / ccs-11tl.lha / lbl / xview / segal / segal.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-12-25  |  9.4 KB  |  289 lines

  1. /*
  2.  * segal.c - Contains main() for project segal
  3.  * This file was generated by `gxv'.
  4.  *
  5.  * Various other initialization code has been added.
  6.  *
  7.  *    -Bryan Skene
  8.  */
  9.  
  10. #include "common.h"
  11.  
  12. #include "file_ui.h"
  13. #include "filter_ui.h"
  14. #include "image_reg_ui.h"
  15. #include "mask_grow_ui.h"
  16. #include "mask_log_ui.h"
  17. #include "paint_ui.h"
  18. #include "preferences_ui.h"
  19. #include "threshold_ui.h"
  20. #include "view_ui.h"
  21.  
  22. #ifdef MAIN
  23. #include <stdio.h>
  24. #include <sys/param.h>
  25. #include <sys/types.h>
  26. #include <xview/xview.h>
  27. #include <xview/panel.h>
  28. #include <xview/textsw.h>
  29. #include <xview/xv_xrect.h>
  30. #include "list_ui.h"
  31.  
  32. Attr_attribute    INSTANCE;
  33.  
  34. /*
  35.  * External variable declarations.
  36.  */
  37. view_win_objects    *View_win;
  38. view_pop_timer_objects    *View_pop_timer;
  39. file_pop_load_image_objects    *File_pop_load_image;
  40. file_pop_load_mask_objects    *File_pop_load_mask;
  41. file_pop_new_mask_objects    *File_pop_new_mask;
  42. file_pop_save_as_objects    *File_pop_save_as;
  43. file_pop_save_image_objects    *File_pop_save_image;
  44. filter_pop_filter_objects    *Filter_pop_filter;
  45. image_reg_pop_image_reg_objects    *Image_reg_pop_image_reg;
  46. image_reg_pop_ref_frame_objects    *Image_reg_pop_ref_frame;
  47. list_pop_list_objects    *List_pop_list;
  48. mask_grow_pop_mask_grow_objects    *Mask_grow_pop_mask_grow;
  49. mask_grow_pop_options_objects    *Mask_grow_pop_options;
  50. mask_log_pop_mask_log_objects    *Mask_log_pop_mask_log;
  51. mask_log_pop_options_objects    *Mask_log_pop_options;
  52. paint_win_paint_objects    *Paint_win_paint;
  53. preferences_pop_preferences_display_objects    *Preferences_pop_preferences_display;
  54. threshold_pop_threshold_objects    *Threshold_pop_threshold;
  55. paint_pop_brush_objects    *Paint_pop_brush;
  56.  
  57. void
  58. main(argc, argv)
  59.     int        argc;
  60.     char        **argv;
  61. {
  62.     void create_cursors();
  63.     void grow_setup();
  64.     void info_init();
  65.     void parse_args();
  66.  
  67.     void load_image_header();
  68.     void load_mask();
  69.     void recall_list();
  70.     void new_mask_proc();
  71.     void save_mask_as();
  72.     void save_image_as();
  73.  
  74.     /* save in globals for HIPS header */
  75.     ac = argc;
  76.     av = argv;
  77.  
  78.     parse_args(argc, argv);
  79.  
  80.     /* Initialize XView */
  81.     xv_init(XV_INIT_ARGC_PTR_ARGV, &argc, argv, NULL);
  82.     INSTANCE = xv_unique_key();
  83.  
  84.     /* initialize global variables */
  85.     info_init(); /* ***IMPORTANT*** init routine in storage.c */
  86.  
  87.     /*
  88.      * Initialize user interface components.
  89.      * Do NOT edit the object initializations by hand.
  90.      */
  91.     View_win = view_win_objects_initialize(NULL, NULL);
  92.     File_pop_load_image = file_pop_load_image_objects_initialize(NULL, View_win->win);
  93.     File_pop_load_mask = file_pop_load_mask_objects_initialize(NULL, View_win->win);
  94.     File_pop_new_mask = file_pop_new_mask_objects_initialize(NULL, View_win->win);
  95.     File_pop_save_as = file_pop_save_as_objects_initialize(NULL, View_win->win);
  96.     File_pop_save_image = file_pop_save_image_objects_initialize(NULL, View_win->win);
  97.     Filter_pop_filter = filter_pop_filter_objects_initialize(NULL, View_win->win);
  98.     Image_reg_pop_image_reg = image_reg_pop_image_reg_objects_initialize(NULL, View_win->win);
  99.     Image_reg_pop_ref_frame = image_reg_pop_ref_frame_objects_initialize(NULL, View_win->win);
  100.     List_pop_list = list_pop_list_objects_initialize(NULL, View_win->win);
  101.     Mask_grow_pop_mask_grow = mask_grow_pop_mask_grow_objects_initialize(NULL, View_win->win);
  102.     Mask_grow_pop_options = mask_grow_pop_options_objects_initialize(NULL, View_win->win);
  103.     Mask_log_pop_mask_log = mask_log_pop_mask_log_objects_initialize(NULL, View_win->win);
  104.     Mask_log_pop_options = mask_log_pop_options_objects_initialize(NULL, View_win->win);
  105.     Paint_win_paint = paint_win_paint_objects_initialize(NULL, View_win->win);
  106.     Paint_win_paint = paint_win_paint_objects_initialize(NULL, View_win->win);
  107.     Paint_pop_brush = paint_pop_brush_objects_initialize(NULL, Paint_win_paint->win_paint);
  108.     Preferences_pop_preferences_display = preferences_pop_preferences_display_objects_initialize(NULL, View_win->win);
  109.     View_pop_timer = view_pop_timer_objects_initialize(NULL, View_win->win);
  110.     Threshold_pop_threshold = threshold_pop_threshold_objects_initialize(NULL, NULL);
  111.     
  112.         /* get global X window stuff */
  113.         display = (Display *) xv_get(View_win->win, XV_DISPLAY, NULL);
  114.         screen = DefaultScreen(display);
  115.     winv = DefaultVisual(display, screen);
  116.     winv_info = (XVisualInfo *) malloc(sizeof(XVisualInfo));
  117.     if((int) XMatchVisualInfo(display, screen,
  118.             XDisplayPlanes(display, screen),
  119.             PseudoColor, winv_info) == 0) {
  120.         fprintf(stderr, "unable to find correct visual \n");
  121.         exit(0);
  122.     }
  123.  
  124.         if (DisplayPlanes(display, screen) == 1) {
  125.                 fprintf(stderr, "This program requires an 8-bit color monitor \n");
  126.                 exit(0);
  127.         }
  128.         gc = DefaultGC(display, screen);
  129.         XSetForeground(display, gc, XWhitePixel(display, screen));
  130.         watch_cursor = XCreateFontCursor(display, XC_watch);
  131.  
  132.     create_cursors();
  133.  
  134.     /* Allocate our standard colors to start with */
  135.     cmap_init();
  136.  
  137.     /*** initialize user interface components ***/
  138.  
  139.     /* set text input fields to call procs on carraige-return */
  140.     (void) xv_set(File_pop_load_image->text_image_fname,
  141.         PANEL_VALUE, in_image,
  142.         PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
  143.         PANEL_NOTIFY_PROC, load_image_header,
  144.         NULL);
  145.     (void) xv_set(File_pop_load_mask->text_mask_fname,
  146.         PANEL_VALUE, in_mask,
  147.         PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
  148.         PANEL_NOTIFY_PROC, load_mask,
  149.         NULL);
  150.     (void) xv_set(List_pop_list->text_l_fname,
  151.         PANEL_VALUE, in_list,
  152.         PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
  153.         PANEL_NOTIFY_PROC, recall_list,
  154.         NULL);
  155.     (void) xv_set(File_pop_new_mask->text_new_fname,
  156.         PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
  157.         PANEL_NOTIFY_PROC, new_mask_proc,
  158.         NULL);
  159.     (void) xv_set(File_pop_save_image->text_i_save_fname,
  160.         PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
  161.         PANEL_NOTIFY_PROC, save_image_as,
  162.         NULL);
  163.     (void) xv_set(File_pop_save_as->text_save_fname,
  164.         PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
  165.         PANEL_NOTIFY_PROC, save_mask_as,
  166.         NULL);
  167.  
  168.     /* The following xv_set does 2 things: getwd returns and strcopies */
  169.     (void) xv_set(File_pop_load_image->text_image_dname,
  170.         PANEL_VALUE, getwd(img.dname),
  171.         NULL);
  172.     (void) xv_set(File_pop_save_image->text_i_save_dname,
  173.         PANEL_VALUE, img.dname,
  174.         NULL);
  175.     (void) xv_set(File_pop_load_mask->text_mask_dname,
  176.         PANEL_VALUE, img.dname,
  177.         NULL);
  178.     (void) xv_set(File_pop_new_mask->text_new_dname,
  179.         PANEL_VALUE, img.dname,
  180.         NULL);
  181.  
  182.     /* set XID's */
  183.         win[WIN_VX].xid = (XID) xv_get(canvas_paint_window(
  184.                 View_win->canv_x), XV_XID);
  185.  
  186.         win[WIN_VY].xid = (XID) xv_get(canvas_paint_window(
  187.                 View_win->canv_y), XV_XID);
  188.  
  189.         win[WIN_VZ].xid = (XID) xv_get(canvas_paint_window(
  190.                 View_win->canv_z), XV_XID);
  191.  
  192.         win[WIN_PAINT].xid = (XID) xv_get(canvas_paint_window(
  193.                 Paint_win_paint->canvas), XV_XID);
  194.  
  195.         win[WIN_REF].xid = (XID) xv_get(canvas_paint_window(
  196.                 Image_reg_pop_ref_frame->canvas), XV_XID);
  197.  
  198.     threshold.xid = (XID) xv_get(canvas_paint_window(
  199.         Threshold_pop_threshold->canvas), XV_XID);
  200.  
  201.     timer.xid = (XID) xv_get(canvas_paint_window(
  202.         View_pop_timer->canv_timer), XV_XID);
  203.  
  204.     /*
  205.      * Turn control over to XView.
  206.      */
  207.     xv_main_loop(View_win->win);
  208.     exit(0);
  209. }
  210.  
  211. #endif
  212.  
  213. /***********************************************************/
  214. void
  215. parse_args(argc, argv)
  216. int argc;
  217. char *argv[];
  218. {
  219.     void      usageterm();
  220.  
  221.     in_image = in_mask = NULL;
  222.     verbose = 0;
  223.     overlay_hue = 170;          /* default  (dark greenish) */
  224.  
  225.     /* Interpret options  */
  226.     while (--argc > 0 && (*++argv)[0] == '-') {
  227.         char     *s;
  228.         for (s = argv[0] + 1; *s; s++)
  229.             switch (*s) {
  230.             case 'i':
  231.                 if (argc < 2)
  232.                     usageterm();
  233.                 in_image = *++argv;
  234.                 fprintf(stderr, " using image file: %s\n", in_image);
  235.                 argc--;
  236.                 break;
  237.             case 'l': /* File containing image + list of masks */
  238.                 if (argc < 2)
  239.                     usageterm();
  240.                 in_list = *++argv;
  241.                 fprintf(stderr, " using list file: %s\n", in_list);
  242.                 argc--;
  243.                 break;
  244.             case 'm':
  245.                 if (argc < 2)
  246.                     usageterm();
  247.                 in_mask = *++argv;
  248.                 fprintf(stderr, " using mask file: %s\n", in_mask);
  249.                 argc--;
  250.                 break;
  251.             case 'c':
  252.                 if (argc < 2)
  253.                     usageterm();
  254.                 sscanf(*++argv, "%d", &overlay_hue);
  255.                 fprintf(stderr, " overlay hue set to %d \n", overlay_hue);
  256.                 argc--;
  257.                 break;
  258.             case 'v':
  259.                 verbose++;
  260.                 break;
  261.             case 'h':
  262.                 usageterm();
  263.                 break;
  264.             default:
  265.                 usageterm();
  266.                 break;
  267.             }
  268.     }                           /* while */
  269.     if (overlay_hue < 0 || overlay_hue > 360) {
  270.     fprintf(stderr, " Error: color value (hue) must be between 0 and 360. \n");
  271.         exit(0);
  272.     }
  273. }
  274.  
  275. /******************************************************/
  276. void
  277. usageterm()
  278. {
  279.     fprintf(stderr, "Usage: segal [-i image][-m mask] [-v] [-c NN][-h][-help] \n");
  280.     fprintf(stderr, "        [-i HIPS file] load specified image file\n");
  281.     fprintf(stderr, "        [-m HIPS file] load specified mask file\n");
  282.     fprintf(stderr, "        [-l list_file] load list_file information\n");
  283.     fprintf(stderr, "        [-v] verbose mode \n");
  284.     fprintf(stderr, "        [-c NN] hue (0 to 360) for overlay blend color (default = 170)\n");
  285.     fprintf(stderr, "        [-h] this list \n");
  286.     fprintf(stderr, "        [-help] list of window attribute help \n\n");
  287.     exit(0);
  288. }
  289.